package demo;


import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 石方旭
 * Date: 2022-07-19
 * Time: 17:39
 */
public class InsertJDBC {

    public static void main(String[] args) throws SQLException {
        //操作数据库就要连接数据库服务器 ->就要描述数据库服务器的位置
        //创建数据源 - >用来描述数据库服务器的位置
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/ebook?characterEncoding=utf8&useSSL=false");
        //设置用户名
        ((MysqlDataSource)dataSource).setUser("root");
        //设置密码
        ((MysqlDataSource)dataSource).setPassword("123456");

        //接下来建立与数据库建立连接
        //调用dataSource的getConnection建立连接 返回给一个connection的对象
        Connection connection = dataSource.getConnection();//-->这里要throws数据库异常

        //用字符串构造sql语句  完成数据库插入操作
        /**
         * mysql> insert into borrow_info values(NULL,(select id from book where name = "诗经") ,
         * (select id from student where name = "貂蝉"),'2019-09-25 17:50:00','2019-10-25 17:50:00');
         */
        String sql = "insert into borrow_info values(NULL,(select id from book where name = '诗经') ,(select id from student where name = '貂蝉'),'2019-09-25 17:50:00','2019-10-25 17:50:00');";

        //用statement对象 来描述一个sql语句  sql语句是.....  与.....(dataSource描述与哪个数据库
        // 建立连接-->connection 对象也保存这个数据库服务器的数据源 然后返回给statement对象)数据库连接
        PreparedStatement statement = connection.prepareStatement(sql);
        //将输入的要插入的数据 设置到sql中
        //执行sql语句
        //通过executeUpdate 执行sql语句  同时返回要执行的行数
        int n = statement.executeUpdate();
        System.out.println("n = " + n);//打印要执行的行数

        //释放连接资源
        //从后往前释放  --> 先释放里面的  在释放外面的
        statement.close();
        connection.close();

    }

}
